﻿/*   
    Copyright (C) 2009 Galaktika Corporation ZAO

    This file is a part of Galaktika.BusinessMonitor
 
    Galaktika.BusinessMonitor is a free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
      
    You should have received a copy of the GNU General Public License
    along with Galaktika.BusinessMonitor.  If not, see <http://www.gnu.org/licenses/>.
  
    If GPL v.3 is not suitable for your products or company,
    Galaktika Corp provides Galaktika.BusinessMonitor under a flexible commercial license
    designed to meet your specific usage and distribution requirements.
    If you have already obtained a commercial license from Galaktika Corp,
    you can use this file under those license terms.
*/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Galaktika.BI.Runtime.Services;
using Galaktika.BI.Silverlight.Controls.General;
using Galaktika.BI.Silverlight.Controls.PivotGrid;

namespace Galaktika.BI.Silverlight.Controls
{
    public partial class PivotTable : UserControl, IBindableObject, IEditableObject
    {
        public PivotTable()
        {
            InitializeComponent();
            m_PivotGrid = new PivotTableHolder();           
            this.LayoutRoot.Children.Add(m_PivotGrid);
        }

        private PivotTableHolder m_PivotGrid;
        public PivotTableHolder PivotGrid
        {
            get { return m_PivotGrid; }
        }

        private object m_DataSource;
        public object ADataSource
        {
            get { return m_DataSource; }
            set 
            { 
                m_DataSource = value;
                //PivotDataLoaderEx loader = this.m_PivotGrid.Loader as PivotDataLoaderEx;
                //if (loader != null)
                //{
                //    IBindingManager manager = null;
                //    this.Bindings.TryGetValue("ADataSource", out manager);
                //    loader.BindManager = manager;
                //}
                IBindingManager manager = null;
                this.Bindings.TryGetValue("ADataSource", out manager);
                if (manager != null && !m_PivotGrid.Bindings.ContainsKey("ADataSource"))
                    m_PivotGrid.Bindings.Add("ADataSource",manager);
                if (m_PivotGrid.ADataSource == null)
                    m_PivotGrid.ADataSource = m_DataSource;
            }
        }

        #region IBindableObject Members

        private IBindingContext m_Context;
        public IBindingContext Context
        {
            get
            {
                return m_Context;
            }
            set
            {
                m_Context = value;
                //if (m_Context != null)
                //{
                //    this.m_PivotGrid.LogManager = new LogManagerEx(m_Context);
                //}
                //PivotDataLoaderEx loader = this.m_PivotGrid.Loader as PivotDataLoaderEx;
                //if (loader != null)
                //{
                //    loader.Context = value;
                //}
                //if (m_Context != null)
                //{
                //    this.m_PivotGrid.IsolatedStoragePrefix = (string)m_Context.UserData["_$Id"];
                //}
                //else
                //{
                //    this.m_PivotGrid.IsolatedStoragePrefix = String.Empty;
                //}
                this.m_PivotGrid.Context = m_Context;
            }
        }

        private Dictionary<string, IBindingManager> m_Bindings;
        public IDictionary<string, IBindingManager> Bindings
        {
            get
            {
                if (m_Bindings == null)
                {
                    m_Bindings = new Dictionary<string, IBindingManager>();
                }

                return m_Bindings;
            }
        }

        #endregion

        #region IEditableObject Members

        public void BeginEdit()
        {
            this.m_PivotGrid.BeginEdit();
        }

        public void CancelEdit()
        {
            
        }

        public void EndEdit()
        {      
            this.m_PivotGrid.EndEdit();
        }

        #endregion
    }
}
